- Timestamp:
- 2018-10-29T15:20:26+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/interp_linear.f90
r10248 r10251 24 24 !> J.Paul 25 25 ! REVISION HISTORY: 26 !> @date September, 2014 - 26 !> @date September, 2014 -Initial version 27 27 !> 28 28 !> @note Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 63 63 !> 64 64 !> @author J.Paul 65 !> @date September, 2014 - Initial Version 66 !> @date July, 2015 - reinitialise detect array for each level 65 !> - September, 2014- Initial Version 67 66 !> 68 67 !> @param[inout] dd_value 2D array of variable value … … 85 84 86 85 ! local variable 87 INTEGER(i4), DIMENSION(4) :: il_shape 88 89 INTEGER(I4), DIMENSION(:,:,:), ALLOCATABLE :: il_detect 90 91 LOGICAL :: ll_discont 92 93 REAL(dp) , DIMENSION(:,:) , ALLOCATABLE :: dl_weight_IJ 94 REAL(dp) , DIMENSION(:,:) , ALLOCATABLE :: dl_weight_I 95 REAL(dp) , DIMENSION(:,:) , ALLOCATABLE :: dl_weight_J 86 INTEGER(i4), DIMENSION(4) :: il_shape 87 88 LOGICAL :: ll_discont 89 90 REAL(dp) , DIMENSION(:,:), ALLOCATABLE :: dl_weight_IJ 91 REAL(dp) , DIMENSION(:,:), ALLOCATABLE :: dl_weight_I 92 REAL(dp) , DIMENSION(:,:), ALLOCATABLE :: dl_weight_J 96 93 97 94 ! loop indices … … 107 104 108 105 ! compute vect2D 109 ALLOCATE(dl_weight_IJ( 4,((id_rho(jp_I)+1)*(id_rho(jp_J)+1))) )106 ALLOCATE(dl_weight_IJ(16,((id_rho(jp_I)+1)*(id_rho(jp_J)+1))) ) 110 107 CALL interp_linear__get_weight2D(dl_weight_IJ(:,:), & 111 108 & id_rho(:), ld_even(:)) 112 109 113 ALLOCATE( dl_weight_I( 2,((id_rho(jp_I)+1) )) )114 ALLOCATE( dl_weight_J( 2,( (id_rho(jp_J)+1))) )110 ALLOCATE( dl_weight_I( 4,((id_rho(jp_I)+1) )) ) 111 ALLOCATE( dl_weight_J( 4,( (id_rho(jp_J)+1))) ) 115 112 CALL interp_linear__get_weight1D(dl_weight_I(:,:), & 116 113 & id_rho(jp_I), ld_even(jp_I)) … … 118 115 & id_rho(jp_J), ld_even(jp_J)) 119 116 120 ALLOCATE(il_detect(il_shape(1),il_shape(2),il_shape(3)))121 122 117 DO jl=1,il_shape(4) 123 il_detect(:,:,:)=id_detect(:,:,:)124 118 ! loop on vertical level 125 119 DO jk=1,il_shape(3) … … 127 121 ! I-J plan 128 122 CALL interp_linear__2D(dd_value(:,:,jk,jl), dd_fill,& 129 & i l_detect(:,:,jk), &123 & id_detect(:,:,jk), & 130 124 & dl_weight_IJ(:,:), & 131 125 & id_rho(jp_I), id_rho(jp_J), & 132 126 & ll_discont) 133 IF( ANY(i l_detect(:,:,jk)==1) )THEN127 IF( ANY(id_detect(:,:,jk)==1) )THEN 134 128 ! I direction 135 129 DO jj=1,il_shape(2) 136 130 CALL interp_linear__1D( dd_value(:,jj,jk,jl), dd_fill,& 137 & i l_detect(:,jj,jk), &131 & id_detect(:,jj,jk), & 138 132 & dl_weight_I(:,:), & 139 133 & id_rho(jp_I), ll_discont ) 140 134 ENDDO 141 IF( ALL(i l_detect(:,:,jk)==0) )THEN135 IF( ALL(id_detect(:,:,jk)==0) )THEN 142 136 CYCLE 143 137 ELSE … … 145 139 DO ji=1,il_shape(1) 146 140 CALL interp_linear__1D( dd_value(ji,:,jk,jl), dd_fill,& 147 & i l_detect(ji,:,jk), &141 & id_detect(ji,:,jk), & 148 142 & dl_weight_J(:,:), & 149 143 & id_rho(jp_J), ll_discont ) … … 155 149 ENDDO 156 150 157 id_detect(:,:,:)=il_detect(:,:,:)158 DEALLOCATE(il_detect)159 160 151 DEALLOCATE(dl_weight_IJ) 161 152 DEALLOCATE(dl_weight_I) 162 153 DEALLOCATE(dl_weight_J) 163 154 164 155 END SUBROUTINE interp_linear_fill 165 156 !------------------------------------------------------------------- … … 170 161 !> 171 162 !> @author J.Paul 172 !> @date September, 2014- Initial Version163 !> - September, 2014- Initial Version 173 164 !> 174 165 !> @param[inout] dd_value 2D array of variable value … … 244 235 IF( ALL(id_detect(ji:ji+id_rhoi, & 245 236 & jj:jj+id_rhoj)==0) ) CYCLE 246 ! check data needed to interpolate237 ! check data to needed to interpolate 247 238 IF( ANY(dl_coarse(ii:ii+1,ij:ij+1)==dd_fill) ) CYCLE 248 239 ! check longitude discontinuity … … 305 296 !> 306 297 !> @author J.Paul 307 !> @date September, 2014- Initial Version298 !> - September, 2014- Initial Version 308 299 !> 309 300 !> @param[inout] dd_value 1D array of variable value … … 417 408 !> 418 409 !> @author J.Paul 419 !> @date September, 2014- Initial Version410 !> - September, 2014- Initial Version 420 411 !> 421 412 !> @param[in] dd_value 2D array of value … … 454 445 !> 455 446 !> @author J.Paul 456 !> @date September, 2014- Initial Version457 !> 447 !> - September, 2014- Initial Version 448 !> 458 449 !> @param[inout] dd_value 2D array of mixed grid value 459 450 !> @param[inout] id_detect 2D array of point to be interpolated … … 486 477 !---------------------------------------------------------------- 487 478 488 IF( ANY( dd_coef(:)==dd_fill ) )THEN 489 CALL logger_error("INTERP LINEAR FILL: fill value detected in coef. "//& 490 & "can not compute interpolation.") 491 ELSE 492 493 ii=0 494 DO jj=1,id_rhoj+1 495 DO ji=1,id_rhoi+1 496 497 ii=ii+1 498 IF(id_detect(ji,jj)==1)THEN 499 500 dd_value(ji,jj)=DOT_PRODUCT(dd_coef(:),dd_weight(:,ii)) 501 id_detect(ji,jj)=0 502 503 ENDIF 504 479 IF( ANY( dd_coef(:)==dd_fill ) )THEN 480 CALL logger_error("INTERP LINEAR FILL: fill value detected in coef. "//& 481 & "can not compute interpolation.") 482 ELSE 483 484 ii=0 485 DO jj=1,id_rhoj+1 486 DO ji=1,id_rhoi+1 487 488 ii=ii+1 489 IF(id_detect(ji,jj)==1)THEN 490 491 dd_value(ji,jj)=DOT_PRODUCT(dd_coef(:),dd_weight(:,ii)) 492 id_detect(ji,jj)=0 493 494 ENDIF 495 496 ENDDO 505 497 ENDDO 506 ENDDO 507 508 ENDIF 498 499 ENDIF 509 500 510 501 END SUBROUTINE interp_linear__2D_fill … … 514 505 !> 515 506 !> @author J.Paul 516 !> @date September, 2014- Initial Version507 !> - September, 2014- Initial Version 517 508 !> 518 509 !> @param[in] dd_value 1D array of value … … 549 540 !> 550 541 !> @author J.Paul 551 !> @date September, 2014- Initial Version542 !> - September, 2014- Initial Version 552 543 !> 553 544 !> @param[inout] dd_value 1D array of mixed grid value … … 600 591 !> 601 592 !> @author J.Paul 602 !> @date September, 2014- Initial Version593 !> - September, 2014- Initial Version 603 594 !> 604 595 !> @param[in] dd_weight interpolation weight of 2D array … … 669 660 !> 670 661 !> @author J.Paul 671 !> @date September, 2014- Initial Version662 !> - September, 2014- Initial Version 672 663 !> 673 664 !> @param[in] dd_weight interpolation weight of 1D array
Note: See TracChangeset
for help on using the changeset viewer.