11.差分演算子の定義 interface d_x module procedure d_x1d, d_x2d, d_x3d !多重定義 end interface function d_x1d(input) result(output) type(var1d), intent(in) :: input !引数が1次元ならこれが呼ばれる type(var1d) :: output nullify(output%value) output%value => my_allocate_1d() output%grid(1) = mod( input%grid(1) + 1, 2 ) output%value(lb_axis1+output%grid(1):ub_axis1-1+output%grid(1)) & = ( input%value(lb_axis1+1:ub_axis1) & - input%value(lb_axis1:ub_axis1-1) ) / dx end function d_x1d