Changeset 947 for codes/icosagcm/devel/src/vertical/vertical_remap.f90
- Timestamp:
- 07/10/19 16:31:55 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/vertical/vertical_remap.f90
r913 r947 4 4 IMPLICIT NONE 5 5 PRIVATE 6 PUBLIC vertical_remap_extdata,compute_vertical_remap_extdata 6 7 7 8 PUBLIC :: vertical_remap … … 107 108 END SUBROUTINE compute_vertical_remap 108 109 110 SUBROUTINE vertical_remap_extdata(field_in,f_target_pressure,field_out) 111 USE icosa 112 USE pression_mod 113 USE omp_para 114 USE disvert_mod, ONLY : presnivs 115 116 IMPLICIT NONE 117 TYPE(t_field),POINTER :: field_in(:) 118 TYPE(t_field),POINTER :: field_out(:) 119 TYPE(t_field),POINTER :: f_target_pressure(:) 120 121 REAL(rstd),POINTER :: target_pressure(:,:) 122 REAL(rstd),POINTER :: in(:,:) 123 REAL(rstd),POINTER :: out(:,:) 124 INTEGER :: ind 125 126 DO ind=1,ndomain 127 IF (.NOT. assigned_domain(ind)) CYCLE 128 CALL swap_dimensions(ind) 129 CALL swap_geometry(ind) 130 in=field_in(ind) 131 out=field_out(ind) 132 target_pressure=f_target_pressure(ind) 133 CALL compute_vertical_remap_extdata(in,target_pressure,out) 134 ENDDO 135 136 END SUBROUTINE vertical_remap_extdata 137 138 SUBROUTINE compute_vertical_remap_extdata(in,target_pressure,out2d_press) 139 USE omp_para 140 USE disvert_mod, ONLY : presnivs 141 IMPLICIT NONE 142 REAL(rstd),INTENT(IN) :: in(:,:) 143 REAL(rstd),INTENT(IN) :: target_pressure(iim*jjm,llm+1) 144 REAL(rstd),INTENT(OUT) :: out2d_press(iim*jjm,llm+1) 145 REAL(rstd) :: coeff, target_pval,testp1,testp2 146 INTEGER :: i,j,ij,l,n,nb_level 147 INTEGER :: a 148 INTEGER :: b 149 LOGICAL :: positive 150 151 nb_level=size(presnivs) 152 !$OMP BARRIER 153 IF (is_omp_level_master) THEN 154 DO l=1,llm 155 DO j=jj_begin,jj_end 156 DO i=ii_begin,ii_end 157 ij=(j-1)*iim+i 158 target_pval=target_pressure(ij,l) 159 a=0 160 DO n=1,nb_level-1 161 IF ( (target_pval<=presnivs(n) .AND. target_pval>=presnivs(n+1))) THEN 162 testp1=presnivs(n); testp2=presnivs(n+1) 163 a=n ; b=n+1 ; EXIT 164 ENDIF 165 ENDDO 166 IF (a==0) THEN 167 IF (target_pval>=presnivs(1)) THEN 168 a=1 ; b=2 169 ELSE 170 a=nb_level-1 ; b=nb_level 171 ENDIF 172 ENDIF 173 174 coeff=(target_pval-presnivs(a))/(presnivs(a)-presnivs(b)) 175 out2d_press(ij,l)=in(ij,a)+coeff*(in(ij,a)-in(ij,b)) 176 ENDDO 177 ENDDO 178 ENDDO 179 180 ENDIF 181 !$OMP BARRIER 182 183 END SUBROUTINE compute_vertical_remap_extdata 184 185 186 109 187 END MODULE vertical_remap_mod
Note: See TracChangeset
for help on using the changeset viewer.