When CLASS does not know about the User Subsection, it will not accept to instantiate the SIC structure R%USER%:
LAS90> set variable user E-SETVAR, No user function set for SET VAR USER LAS90> exa r%user% E-EXAMINE, No such variable R%USER
The following subroutines show basically what should be done by the section owner to allow CLASS to instantiate SIC variables pointing to the User Subsection when the command SET VARIABLE USER is invoked.
subroutine mysetvar_init !---------------------------------------------------------------------- ! Preliminary declarations !---------------------------------------------------------------------- ! ! 1) Tell Class who I am call class_user_owner('OWNER','TITLE') ! ! 2) Declare my instantiation routine call class_user_setvar(mysetvar) ! ! Nothing more: return and wait for Class to ask for my User ! Subsection instantiation. ! end subroutine mysetvar_init
subroutine mysetvar(version,error) use mytypes !--------------------------------------------------------------------- ! Define SIC variables in the structure R%USER%OWNER% which map the ! subsection content. !--------------------------------------------------------------------- integer(kind=4), intent(in) :: version ! The version of the data logical, intent(inout) :: error ! Logical error flag ! Local logical :: error integer(kind=4) :: ndim,dims ! error = .false. ndim = 0 call class_user_def_inte('DATAI4',ndim,dims,error) call class_user_def_real('DATAR4',ndim,dims,error) call class_user_def_dble('DATAR8',ndim,dims,error) call class_user_def_strn('DATAC4',ndim,dims,error) if (error) return ! end subroutine mysetvar
With these routines, CLASS is now able to instantiate the SIC variables:
MYPROG> set variable user MYPROG> exa r%user% R%USER% ! Structure GLOBAL R%USER%OWNER%DATAC4 = ABCD ! Character*4 GLOBAL RO R%USER%OWNER%DATAR8 = 333.0000000000000 ! Double GLOBAL RO R%USER%OWNER%DATAR4 = 222.0000 ! Real GLOBAL RO R%USER%OWNER%DATAI4 = 111 ! Integer GLOBAL RO R%USER%OWNER ! Structure GLOBAL