Changeset 874 for codes/icosagcm/devel/src
- Timestamp:
- 05/27/19 15:56:37 (5 years ago)
- Location:
- codes/icosagcm/devel/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/dissip/guided_mod.f90
r820 r874 2 2 3 3 CHARACTER(LEN=255),SAVE :: guided_type 4 CHARACTER(LEN=255),SAVE :: guided_nudging_field 4 5 !$OMP THREADPRIVATE(guided_type) 5 6 -
codes/icosagcm/devel/src/dissip/nudging_mod.f90
r820 r874 17 17 TYPE(t_field),POINTER :: f_relax_coef_e(:), f_target_ue(:), & 18 18 f_relax_coef_i(:), f_target_theta_rhodz(:) 19 CHARACTER(LEN=255),SAVE :: guided_nudging_field 20 INTEGER,SAVE :: nudging_time 19 21 20 22 PUBLIC :: init_guided, guided … … 39 41 CALL getin('nudging_radius', nudging_radius) 40 42 nudging_radius = nudging_radius / scale_factor 41 ! time=0. 42 ! CALL getin('nudging_time', time) 43 44 nudging_time=0. 45 CALL getin('nudging_time', nudging_time) 43 46 44 47 ! we should check that radius>0 45 46 !SELECT CASE(TRIM(nudg_name)) 47 ! CASE ('f_u') 48 CALL allocate_field(f_relax_coef_e, field_u, type_real, name='nudging_coef_e') 49 CALL allocate_field(f_target_ue, field_u, type_real, llm, name='nudging_target_e') 50 ! CASE ('f_theta_rhodz') 51 CALL allocate_field(f_relax_coef_i, field_t, type_real, name='nudging_coef_i') 52 CALL allocate_field(f_target_theta_rhodz, field_t, type_real, llm,nqdyn, name='nudging_target_theta') 53 ! CASE DEFAULT 54 !END SELECT 48 CALL getin("guided_nudging_field",guided_nudging_field) 49 50 SELECT CASE(TRIM(guided_nudging_field)) 51 CASE ('wind') 52 CALL allocate_field(f_relax_coef_e, field_u, type_real, name='nudging_coef_e') 53 CALL allocate_field(f_target_ue, field_u, type_real, llm, name='nudging_target_e') 54 CASE ('temperature') 55 CALL allocate_field(f_relax_coef_i, field_t, type_real, name='nudging_coef_i') 56 CALL allocate_field(f_target_theta_rhodz, field_t, type_real, llm,nqdyn, name='nudging_target_theta') 57 CASE ('wind_temperature') 58 CALL allocate_field(f_relax_coef_e, field_u, type_real, name='nudging_coef_e') 59 CALL allocate_field(f_target_ue, field_u, type_real, llm, name='nudging_target_e') 60 CALL allocate_field(f_relax_coef_i, field_t, type_real, name='nudging_coef_i') 61 CALL allocate_field(f_target_theta_rhodz, field_t, type_real, llm,nqdyn, name='nudging_target_theta') 62 CASE DEFAULT 63 PRINT*,"Bad selector for varaible init_guided_nudging>",TRIM(guided_nudging_field) 64 PRINT*," option are <none>, <wind>, <temperature>,<wind_temperature>" 65 STOP 66 END SELECT 55 67 56 68 ! compute relax_coef and target_ue … … 94 106 CALL dist_lonlat(lon, lat, center_lon, center_lat, dist) 95 107 c = tanh((1.-radius*dist/nudging_radius)*20.) ! 1 inside circle, -1 outside 108 IF (c>0.99) c=1 109 IF (c<-0.99) c=-1 96 110 relax_coef = .5*(1.+c) ! rescale to [0,1] range ; ! 1 inside circle, 0 outside 97 111 END FUNCTION relax_coef … … 128 142 129 143 SUBROUTINE guided(tt, f_ps, f_theta_rhodz, f_u, f_q) 144 USE xios_mod 145 USE theta2theta_rhodz_mod 146 USE wind_mod 147 USE transfert_mod 148 USE time_mod 149 USE pression_mod 130 150 REAL(rstd), INTENT(IN):: tt 131 151 TYPE(t_field),POINTER :: f_ps(:) … … 133 153 TYPE(t_field),POINTER :: f_theta_rhodz(:) 134 154 TYPE(t_field),POINTER :: f_u(:) 135 TYPE(t_field),POINTER :: f_q(:) 155 TYPE(t_field),POINTER :: f_q(:) 156 TYPE(t_field),POINTER :: f_T_guided(:), f_ulon_guided(:), f_ulat_guided(:),f_pressure_mid(:) 136 157 REAL(rstd), POINTER :: target_ue(:,:), ue(:,:), coef_e(:) 137 158 REAL(rstd), POINTER :: target_theta_rhodz(:,:,:), theta_rhodz(:,:,:), coef_i(:) 138 159 INTEGER :: ind 160 161 IF (MOD(INT(tt),nudging_time)==dt) THEN 162 163 CALL allocate_field(f_T_guided, field_t, type_real, llm, name='nudging_T') 164 CALL allocate_field(f_ulon_guided, field_t, type_real, llm, name='nudging_ulon') 165 CALL allocate_field(f_ulat_guided, field_t, type_real, llm, name='nudging_ulat') 166 167 CALL xios_read_field("T_guided_read",f_T_guided) 168 CALL transfert_request(f_T_guided,req_i0) 169 CALL temperature2theta_rhodz(f_ps,f_T_guided,f_target_theta_rhodz) 170 CALL xios_read_field("ulon_guided_read",f_ulon_guided) 171 CALL xios_read_field("ulat_guided_read",f_ulat_guided) 172 CALL transfert_request(f_ulon_guided,req_i0) 173 CALL transfert_request(f_ulat_guided,req_i0) 174 CALL transfert_request(f_ulon_guided,req_i1) 175 CALL transfert_request(f_ulat_guided,req_i1) 176 CALL xios_write_field("ulat_guided_out",f_ulat_guided) 177 CALL xios_write_field("ulon_guided_out",f_ulon_guided) 178 CALL ulonlat2un(f_ulon_guided, f_ulat_guided,f_target_ue) 179 180 CALL deallocate_field(f_T_guided) 181 CALL deallocate_field(f_ulon_guided) 182 CALL deallocate_field(f_ulat_guided) 183 184 ENDIF 185 139 186 140 187 DO ind = 1 , ndomain -
codes/icosagcm/devel/src/output/xios_mod.F90
r726 r874 48 48 USE time_mod 49 49 USE metric, ONLY : vup,vdown, cell_glo 50 USE disvert_mod, ONLY : presnivs 50 51 IMPLICIT NONE 51 52 TYPE(xios_context) :: ctx_hdl … … 70 71 CALL xios_set_axis_attr("lev",n_glo=llm ,value=lev_value) ; 71 72 CALL xios_set_axis_attr("levp1",n_glo=llm+1 ,value=lev_valuep1) ; 73 CALL xios_set_axis_attr("presnivs_mb",n_glo=llm, value=presnivs/100., unit="mb") ; 72 74 CALL xios_set_axis_attr("nq",n_glo=nqtot, value=nq_value) ; 73 75
Note: See TracChangeset
for help on using the changeset viewer.