Changeset 839 for codes/icosagcm/devel
- Timestamp:
- 05/03/19 14:15:16 (5 years ago)
- Location:
- codes/icosagcm/devel/src/base
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/base/field.f90
r533 r839 85 85 86 86 SUBROUTINE allocate_field_(field,field_type,data_type,dim1,dim2,name) 87 USE domain_mod88 USE omp_para89 IMPLICIT NONE87 USE domain_mod 88 USE omp_para 89 USE grid_param 90 90 TYPE(t_field) :: field(:) 91 91 INTEGER,INTENT(IN) :: field_type … … 94 94 CHARACTER(*), OPTIONAL :: name 95 95 INTEGER :: ind 96 INTEGER :: i i_size,jj_size96 INTEGER :: ij_size 97 97 98 98 DO ind=1,ndomain … … 119 119 field(ind)%data_type=data_type 120 120 field(ind)%field_type=field_type 121 122 IF (field_type==field_T) THEN 123 jj_size=domain(ind)%jjm 124 ELSE IF (field_type==field_U) THEN 125 jj_size=3*domain(ind)%jjm 126 ELSE IF (field_type==field_Z) THEN 127 jj_size=2*domain(ind)%jjm 128 ENDIF 129 130 ii_size=domain(ind)%iim 121 122 SELECT CASE(grid_type) 123 CASE(grid_ico) 124 ij_size=domain(ind)%iim 125 IF (field_type==field_T) THEN 126 ij_size=ij_size*domain(ind)%jjm 127 ELSE IF (field_type==field_U) THEN 128 ij_size=3*ij_size*domain(ind)%jjm 129 ELSE IF (field_type==field_Z) THEN 130 ij_size=2*ij_size*domain(ind)%jjm 131 ENDIF 131 132 132 IF (field(ind)%ndim==4) THEN 133 IF (data_type==type_integer) ALLOCATE(field(ind)%ival4d(ii_size*jj_size,dim1,dim2)) 134 IF (data_type==type_real) ALLOCATE(field(ind)%rval4d(ii_size*jj_size,dim1,dim2)) 135 IF (data_type==type_logical) ALLOCATE(field(ind)%lval4d(ii_size*jj_size,dim1,dim2)) 136 ELSE IF (field(ind)%ndim==3) THEN 137 IF (data_type==type_integer) ALLOCATE(field(ind)%ival3d(ii_size*jj_size,dim1)) 138 IF (data_type==type_real) ALLOCATE(field(ind)%rval3d(ii_size*jj_size,dim1)) 139 IF (data_type==type_logical) ALLOCATE(field(ind)%lval3d(ii_size*jj_size,dim1)) 140 ELSE IF (field(ind)%ndim==2) THEN 141 IF (data_type==type_integer) ALLOCATE(field(ind)%ival2d(ii_size*jj_size)) 142 IF (data_type==type_real) ALLOCATE(field(ind)%rval2d(ii_size*jj_size)) 143 IF (data_type==type_logical) ALLOCATE(field(ind)%lval2d(ii_size*jj_size)) 144 ENDIF 145 146 ENDDO 133 IF (field(ind)%ndim==4) THEN 134 IF (data_type==type_integer) ALLOCATE(field(ind)%ival4d(ij_size,dim1,dim2)) 135 IF (data_type==type_real) ALLOCATE(field(ind)%rval4d(ij_size,dim1,dim2)) 136 IF (data_type==type_logical) ALLOCATE(field(ind)%lval4d(ij_size,dim1,dim2)) 137 ELSE IF (field(ind)%ndim==3) THEN 138 IF (data_type==type_integer) ALLOCATE(field(ind)%ival3d(ij_size,dim1)) 139 IF (data_type==type_real) ALLOCATE(field(ind)%rval3d(ij_size,dim1)) 140 IF (data_type==type_logical) ALLOCATE(field(ind)%lval3d(ij_size,dim1)) 141 ELSE IF (field(ind)%ndim==2) THEN 142 IF (data_type==type_integer) ALLOCATE(field(ind)%ival2d(ij_size)) 143 IF (data_type==type_real) ALLOCATE(field(ind)%rval2d(ij_size)) 144 IF (data_type==type_logical) ALLOCATE(field(ind)%lval2d(ij_size)) 145 ENDIF 146 147 CASE(grid_unst) 148 PRINT *, 'Allocating field ', field(ind)%name 149 IF (field_type==field_T) THEN 150 ij_size=primal_num 151 ELSE IF (field_type==field_U) THEN 152 ij_size=edge_num 153 ELSE IF (field_type==field_Z) THEN 154 ij_size=dual_num 155 ENDIF 156 157 IF (field(ind)%ndim==4) THEN 158 IF (data_type==type_integer) ALLOCATE(field(ind)%ival4d(dim1,ij_size,dim2)) 159 IF (data_type==type_real) ALLOCATE(field(ind)%rval4d(dim1,ij_size,dim2)) 160 IF (data_type==type_logical) ALLOCATE(field(ind)%lval4d(dim1,ij_size,dim2)) 161 ELSE IF (field(ind)%ndim==3) THEN 162 IF (data_type==type_integer) ALLOCATE(field(ind)%ival3d(dim1,ij_size)) 163 IF (data_type==type_real) ALLOCATE(field(ind)%rval3d(dim1,ij_size)) 164 IF (data_type==type_logical) ALLOCATE(field(ind)%lval3d(dim1,ij_size)) 165 ELSE IF (field(ind)%ndim==2) THEN 166 IF (data_type==type_integer) ALLOCATE(field(ind)%ival2d(ij_size)) 167 IF (data_type==type_real) ALLOCATE(field(ind)%rval2d(ij_size)) 168 IF (data_type==type_logical) ALLOCATE(field(ind)%lval2d(ij_size)) 169 ENDIF 170 171 END SELECT 172 ENDDO 147 173 !$OMP BARRIER 148 174 -
codes/icosagcm/devel/src/base/grid_param.f90
r830 r839 1 1 MODULE grid_param 2 USE ISO_C_BINDING 2 3 IMPLICIT NONE 3 4 SAVE 5 6 ! Some variable are BIND(C) to be accessible from Python ! They are declared using C sizes 7 4 8 INTEGER :: iim_glo=40 5 9 INTEGER :: jjm_glo … … 7 11 INTEGER, PARAMETER :: grid_unst=1, grid_ico = 2 8 12 INTEGER :: grid_type ! unstructured or icosahedral 9 INTEGER, BIND(C) :: llm=19 13 14 INTEGER(C_INT), BIND(C) :: llm=19, & ! number of vertical levels 15 nqdyn ! number of dynamical tracers : 1 if dry, more if moist 16 10 17 INTEGER :: nqtot ! number of tracers handled by advection scheme 11 INTEGER, BIND(C) :: nqdyn ! number of dynamical tracers : 1 if dry, more if moist 18 19 INTEGER(C_INT), BIND(C) :: edge_num, primal_num, dual_num, & 20 max_primal_deg, max_dual_deg, max_trisk_deg 21 12 22 END MODULE grid_param
Note: See TracChangeset
for help on using the changeset viewer.