--- MITgcm/tools/OAD_support/ad_inline.F 2012/09/20 23:12:47 1.1 +++ MITgcm/tools/OAD_support/ad_inline.F 2012/12/21 03:40:10 1.2 @@ -3,7 +3,7 @@ subroutine push_s0(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape implicit none double precision :: x C $OpenAD$ END DECLS @@ -13,7 +13,7 @@ subroutine pop_s0(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape implicit none double precision :: x C $OpenAD$ END DECLS @@ -21,9 +21,61 @@ x=oad_dt(oad_dt_ptr) end subroutine + subroutine push_s1(x) +C $OpenAD$ INLINE DECLS + use OAD_tape + implicit none + double precision :: x(:) +C $OpenAD$ END DECLS + oad_chunk_size=size(x,1) + if(oad_dt_sz .lt. oad_dt_ptr+oad_chunk_size) + + call oad_dt_grow() + oad_dt(oad_dt_ptr:oad_dt_ptr+oad_chunk_size-1)= + +x + oad_dt_ptr=oad_dt_ptr+oad_chunk_size + end subroutine + + subroutine pop_s1(x) +C $OpenAD$ INLINE DECLS + use OAD_tape + implicit none + double precision :: x(:) +C $OpenAD$ END DECLS + oad_chunk_size=size(x,1) + oad_dt_ptr=oad_dt_ptr-oad_chunk_size + x=oad_dt(oad_dt_ptr:oad_dt_ptr+oad_chunk_size-1) + end subroutine + + subroutine push_s2(x) +C $OpenAD$ INLINE DECLS + use OAD_tape + implicit none + double precision :: x(:,:) +C $OpenAD$ END DECLS + oad_chunk_size=size(x,1)*size(x,2) + if(oad_dt_sz .lt. oad_dt_ptr+oad_chunk_size) + + call oad_dt_grow() + oad_dt(oad_dt_ptr:oad_dt_ptr+oad_chunk_size-1)= + +reshape(x,(/oad_chunk_size/)) + oad_dt_ptr=oad_dt_ptr+oad_chunk_size + end subroutine + + subroutine pop_s2(x) +C $OpenAD$ INLINE DECLS + use OAD_tape + implicit none + double precision :: x(:,:) +C $OpenAD$ END DECLS + oad_chunk_size=size(x,1)*size(x,2) + oad_dt_ptr=oad_dt_ptr-oad_chunk_size + x=reshape(oad_dt(oad_dt_ptr:oad_dt_ptr+oad_chunk_size-1), + +shape(x)) + end subroutine + subroutine apush(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape + use OAD_active implicit none type(active) :: x C $OpenAD$ END DECLS @@ -33,7 +85,8 @@ subroutine apop(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape + use OAD_active implicit none type(active) :: x C $OpenAD$ END DECLS @@ -43,7 +96,7 @@ subroutine push_i_s0(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape implicit none integer :: x C $OpenAD$ END DECLS @@ -53,7 +106,7 @@ subroutine pop_i_s0(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape implicit none integer :: x C $OpenAD$ END DECLS @@ -61,9 +114,60 @@ x=oad_it(oad_it_ptr) end subroutine + subroutine push_i_s1(x) +C $OpenAD$ INLINE DECLS + use OAD_tape + implicit none + integer :: x(:) +C $OpenAD$ END DECLS + oad_chunk_size=size(x,1) + if(oad_it_sz .lt. oad_it_ptr+oad_chunk_size) + +call oad_it_grow() + oad_it(oad_it_ptr:oad_it_ptr+oad_chunk_size-1)= + +x + oad_it_ptr=oad_it_ptr+oad_chunk_size + end subroutine + + subroutine pop_i_s1(x) +C $OpenAD$ INLINE DECLS + use OAD_tape + implicit none + integer :: x(:) +C $OpenAD$ END DECLS + oad_chunk_size=size(x,1) + oad_it_ptr=oad_it_ptr-oad_chunk_size + x=oad_it(oad_it_ptr:oad_it_ptr+oad_chunk_size-1) + end subroutine + + subroutine push_i_s2(x) +C $OpenAD$ INLINE DECLS + use OAD_tape + implicit none + integer :: x(:,:) +C $OpenAD$ END DECLS + oad_chunk_size=size(x,1)*size(x,2) + if(oad_it_sz .lt. oad_it_ptr+oad_chunk_size) + + call oad_it_grow() + oad_it(oad_it_ptr:oad_it_ptr+oad_chunk_size-1)= + +reshape(x,(/oad_chunk_size/)) + oad_it_ptr=oad_it_ptr+oad_chunk_size + end subroutine + + subroutine pop_i_s2(x) +C $OpenAD$ INLINE DECLS + use OAD_tape + implicit none + integer :: x(:,:) +C $OpenAD$ END DECLS + oad_chunk_size=size(x,1)*size(x,2) + oad_it_ptr=oad_it_ptr-oad_chunk_size + x=reshape(oad_it(oad_it_ptr:oad_it_ptr+oad_chunk_size-1), + +shape(x)) + end subroutine + subroutine push_b(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape implicit none logical :: x C $OpenAD$ END DECLS @@ -73,7 +177,7 @@ subroutine pop_b(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape implicit none logical :: x C $OpenAD$ END DECLS @@ -83,7 +187,7 @@ subroutine push_s(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape implicit none character*(80) :: x C $OpenAD$ END DECLS @@ -93,16 +197,19 @@ subroutine pop_s(x) C $OpenAD$ INLINE DECLS - use OpenAD_tape + use OAD_tape implicit none character*(80) :: x C $OpenAD$ END DECLS oad_st_ptr=oad_st_ptr-1 x=oad_st(oad_st_ptr) end subroutine - + +C ----------------------- Propagation ----------------------- + subroutine saxpy(a,x,y) C $OpenAD$ INLINE DECLS + use OAD_active double precision, intent(in) :: a type(active), intent(in) :: x type(active), intent(inout) :: y @@ -112,6 +219,7 @@ subroutine zeroderiv(x) C $OpenAD$ INLINE DECLS + use OAD_active type(active), intent(out) :: x C $OpenAD$ END DECLS x%d=0.0d0 @@ -119,6 +227,7 @@ subroutine setderiv(y,x) C $OpenAD$ INLINE DECLS + use OAD_active type(active), intent(out) :: x type(active), intent(in) :: y C $OpenAD$ END DECLS @@ -127,6 +236,7 @@ subroutine incderiv(y,x) C $OpenAD$ INLINE DECLS + use OAD_active type(active), intent(out) :: x type(active), intent(in) :: y C $OpenAD$ END DECLS @@ -135,6 +245,7 @@ subroutine decderiv(y,x) C $OpenAD$ INLINE DECLS + use OAD_active type(active), intent(out) :: x type(active), intent(in) :: y C $OpenAD$ END DECLS @@ -146,20 +257,22 @@ C reals ----------------------------------------------------- subroutine cp_arg_store_real_scalar(x) C $OpenAD$ INLINE DECLS + use OAD_cp double precision :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_real_scalar(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none double precision :: x C $OpenAD$ END DECLS - read(cp_io_unit) x + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x #endif @@ -167,20 +280,25 @@ subroutine cp_arg_store_real_scalar_a(x) C $OpenAD$ INLINE DECLS - double precision :: x + use OAD_active + use OAD_cp + implicit none + type(active) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x%v #endif - write(cp_io_unit) x%v + write(unit=cp_io_unit) x%v end subroutine subroutine cp_arg_restore_real_scalar_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision :: x + type(active) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x%v + read(unit=cp_io_unit) x%v #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x%v #endif @@ -188,21 +306,23 @@ subroutine cp_arg_store_real_vector(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none double precision, dimension(:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_real_vector(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none double precision, dimension(:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1) #endif @@ -210,21 +330,25 @@ subroutine cp_arg_store_real_vector_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(:) :: x + type(active), dimension(:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1)%v #endif - write(cp_io_unit) x%v + write(unit=cp_io_unit) x%v end subroutine subroutine cp_arg_restore_real_vector_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(:) :: x + type(active), dimension(:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x%v + read(unit=cp_io_unit) x%v #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1)%v #endif @@ -232,21 +356,23 @@ subroutine cp_arg_store_real_matrix(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - double precision, dimension(::) :: x + double precision, dimension(:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_real_matrix(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - double precision, dimension(::) :: x + double precision, dimension(:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1,1) #endif @@ -254,21 +380,25 @@ subroutine cp_arg_store_real_matrix_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(::) :: x + type(active), dimension(:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1)%v #endif - write(cp_io_unit) x%v + write(unit=cp_io_unit) x%v end subroutine subroutine cp_arg_restore_real_matrix_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(::) :: x + type(active), dimension(:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x%v + read(unit=cp_io_unit) x%v #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1.1)%v #endif @@ -276,87 +406,99 @@ subroutine cp_arg_store_real_three_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - double precision, dimension(::) :: x + double precision, dimension(:,:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine - subroutine cp_arg_store_real_three_tensor_a(x) + subroutine cp_arg_restore_real_three_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - double precision, dimension(::) :: x + double precision, dimension(:,:,:) :: x C $OpenAD$ END DECLS + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP - write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1)%v + write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1) #endif - write(cp_io_unit) x%v end subroutine - subroutine cp_arg_restore_real_three_tensor(x) + subroutine cp_arg_store_real_three_tensor_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(::) :: x + type(active), dimension(:,:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x #ifdef OAD_DEBUG_CP - write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1) + write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1)%v #endif + write(unit=cp_io_unit) x%v end subroutine subroutine cp_arg_restore_real_three_tensor_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(::) :: x + type(active), dimension(:,:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x%v #endif - read(cp_io_unit) x%v + read(unit=cp_io_unit) x%v end subroutine subroutine cp_arg_store_real_four_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - double precision, dimension(::) :: x + double precision, dimension(:,:,:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1,1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine - subroutine cp_arg_store_real_four_tensor_a(x) + subroutine cp_arg_restore_real_four_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - double precision, dimension(::) :: x + double precision, dimension(:,:,:,:) :: x C $OpenAD$ END DECLS + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP - write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1,1)%v + write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1,1) #endif - write(cp_io_unit) x%v end subroutine - subroutine cp_arg_restore_real_four_tensor(x) + subroutine cp_arg_store_real_four_tensor_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(::) :: x + type(active), dimension(:,:,:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x #ifdef OAD_DEBUG_CP - write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1,1) + write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1,1)%v #endif + write(unit=cp_io_unit) x%v end subroutine subroutine cp_arg_restore_real_four_tensor_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(::) :: x + type(active), dimension(:,:,:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x%v + read(unit=cp_io_unit) x%v #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1,1)%v #endif @@ -364,43 +506,49 @@ subroutine cp_arg_store_real_five_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - double precision, dimension(::) :: x + double precision, dimension(:,:,:,:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1,1,1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine - subroutine cp_arg_store_real_five_tensor_a(x) + subroutine cp_arg_restore_real_five_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - double precision, dimension(::) :: x + double precision, dimension(:,:,:,:,:) :: x C $OpenAD$ END DECLS + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP - write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1,1,1)%v + write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1,1,1) #endif - write(cp_io_unit) x%v end subroutine - subroutine cp_arg_restore_real_five_tensor(x) + subroutine cp_arg_store_real_five_tensor_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(::) :: x + type(active), dimension(:,:,:,:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x #ifdef OAD_DEBUG_CP - write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1,1,1) + write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1,1,1)%v #endif + write(unit=cp_io_unit) x%v end subroutine subroutine cp_arg_restore_real_five_tensor_a(x) C $OpenAD$ INLINE DECLS + use OAD_active + use OAD_cp implicit none - double precision, dimension(::) :: x + type(active), dimension(:,:,:,:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x%v + read(unit=cp_io_unit) x%v #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1,1,1)%v #endif @@ -410,21 +558,23 @@ C integers ----------------------------------------------------- subroutine cp_arg_store_integer_scalar(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none integer :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_integer_scalar(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none integer :: x C $OpenAD$ END DECLS - read(cp_io_unit) x + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x #endif @@ -432,21 +582,23 @@ subroutine cp_arg_store_integer_vector(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none integer, dimension(:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_integer_vector(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none integer, dimension(:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1) #endif @@ -454,21 +606,23 @@ subroutine cp_arg_store_integer_matrix(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - integer, dimension(::) :: x + integer, dimension(:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_integer_matrix(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - integer, dimension(::) :: x + integer, dimension(:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1) #endif @@ -476,21 +630,23 @@ subroutine cp_arg_store_integer_three_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - integer, dimension(::) :: x + integer, dimension(:,:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_integer_three_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - integer, dimension(::) :: x + integer, dimension(:,:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1) #endif @@ -498,21 +654,23 @@ subroutine cp_arg_store_integer_four_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - integer, dimension(::) :: x + integer, dimension(:,:,:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1,1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_integer_four_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - integer, dimension(::) :: x + integer, dimension(:,:,:,:) :: x C $OpenAD$ END DECLS - read(cp_io_unit) x + read(unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1,1) #endif @@ -520,21 +678,23 @@ subroutine cp_arg_store_integer_five_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - integer, dimension(::) :: x + integer, dimension(:,:,:,:,:) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x(1,1,1,1,1) #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_integer_five_tensor(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none - integer, dimension(::) :: x + integer, dimension(:,:,:,:,:) :: x C $OpenAD$ END DECLS - read (cp_io_unit) x + read (unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x(1,1,1,1,1) #endif @@ -543,21 +703,23 @@ C strings ----------------------------------------------------- subroutine cp_arg_store_string_scalar(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none character*(80) :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_string_scalar(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none character*(80) :: x C $OpenAD$ END DECLS - read (cp_io_unit) x + read (unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x #endif @@ -566,22 +728,48 @@ C bools ----------------------------------------------------- subroutine cp_arg_store_bool_scalar(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none logical :: x C $OpenAD$ END DECLS #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp write x ', x #endif - write(cp_io_unit) x + write(unit=cp_io_unit) x end subroutine subroutine cp_arg_restore_bool_scalar(x) C $OpenAD$ INLINE DECLS + use OAD_cp implicit none logical :: x C $OpenAD$ END DECLS - read (cp_io_unit) x + read (unit=cp_io_unit) x #ifdef OAD_DEBUG_CP write(standardmessageunit,*)'OAD: cp read x ', x #endif end subroutine + + subroutine cp_arg_store_bool_matrix(x) +C $OpenAD$ INLINE DECLS + use OAD_cp + implicit none + logical, dimension(:,:) :: x +C $OpenAD$ END DECLS +u#ifdef OAD_DEBUG_CP + write(standardmessageunit,*)'OAD: cp write x ', x(1) +#endif + write(unit=cp_io_unit) x + end subroutine + + subroutine cp_arg_restore_bool_matrix(x) +C $OpenAD$ INLINE DECLS + use OAD_cp + implicit none + logical, dimension(:,:) :: x +C $OpenAD$ END DECLS + read(unit=cp_io_unit) x +#ifdef OAD_DEBUG_CP + write(standardmessageunit,*)'OAD: cp read x ', x(1) +#endif + end subroutine