Skip to content

Instantly share code, notes, and snippets.

View tenomoto's full-sized avatar

Takeshi Enomoto tenomoto

View GitHub Profile
@tenomoto
tenomoto / polyconic.sh
Last active June 7, 2016 04:48
Draw a blank map of the world in polyconic projection with GMT
#!/bin/sh
ps=polyconic_coast.ps
w=2.0944c
proj=Poly/${w}
lon0=-180
lon1=`expr ${lon0} + 30`
reg=${lon0}/${lon1}/-90/90
gmt psbasemap -R${reg} -J${proj} -K -Bg10/g10 > ${ps}
gmt pscoast -R${reg} -J${proj} -O -K -W -B >> ${ps}
while [ ${lon0} -lt 120 ]; do
@tenomoto
tenomoto / cyclic.cc
Created May 27, 2016 07:07
Get value for a negative index or for an index larger than the size of container in C++
template <typename Iter>
Iter cyclic(Iter begin, Iter end, int i)
{
auto n = std::distance(begin, end);
while (i < 0) i += n;
return begin + (i % n);
}
@tenomoto
tenomoto / find_index.cc
Created May 27, 2016 05:43
Find index of the first element larger or equal to a given value in C++
#include <iterator>
#include <algorithm>
template <typename Iter, typename T>
size_t find_index(Iter begin, Iter end, T x0)
{
return std::distance(begin, std::find_if(begin, end, [x0](double x){return x >= x0;}));
}
@tenomoto
tenomoto / function.php
Created April 27, 2016 05:50
Multilingual title and description in WordPress with bogo
add_filter( 'option_blogname', 'tr_option_blogname' );
function tr_option_blogname( $blogname ) {
return __($blogname, 'my-theme-child');
}
add_filter( 'option_blogdescription', 'tr_option_blogdescription' );
function tr_option_blogdescription( $blogdescription ) {
return __($blogdescription, 'my-theme-child');
@tenomoto
tenomoto / read_binary.h
Last active April 27, 2016 07:28
Read m elements from a binary file with offset of n elements and return C++ std::vector
#include <iostream>
#include <fstream>
#include <vector>
template <typename T>
std::vector<T> read_binary(std::string fname, size_t n, size_t m, bool reverse = false, bool verbose = false)
{
union u
{
char c[sizeof(T)];
@tenomoto
tenomoto / read_ascii.h
Last active April 27, 2016 07:28
Read the whole content of a text file and return C++ std::vector
#include <iostream>
#include <fstream>
#include <vector>
template <typename T>
std::vector<T> read_ascii(std::string fname, bool verbose = false)
{
std::vector<T> data;
std::ifstream ifs (fname);
T buf;
if (ifs.is_open())
@tenomoto
tenomoto / grd2grb.f90
Created March 30, 2016 08:49
Replace values in ECMWF initial condition in GRIB format
program grd2grb
use grib_api
implicit none
character(len=*), parameter :: &
ifname = "ICMSHepc8INIT", gfname = "out.grd", ofname = "out.grb"
integer, parameter :: &
ug = 41, ntrunc = 21, nv = (ntrunc + 2) * (ntrunc + 1)
real*4, dimension(nv) :: sh
@tenomoto
tenomoto / legendre.cc
Created March 10, 2016 00:03
Legendre polynomials using GiNaC
#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;
ex LegendrePoly(const symbol &x, int n)
{
ex PKer = pow(x * x - 1, n);
return normal(1 / (pow(2, n) * factorial(n)) * diff(PKer, x, n));
@tenomoto
tenomoto / splitwfm
Created January 22, 2016 02:01
Split JMA one-week ensemble using wgrib
#!/bin/bash
N=25 # number of ensembles
NFT0=9 # number of forecast time (including FT=0)
NFT=9
VNAME=""
while getopts ":v:n:" opt; do
case $opt in
v) VNAME=$OPTARG ;;
n) NFT=$OPTARG ;;
\?) echo 'usage:: splitwfm [-v VARNAME -n NFT] FNAME'
@tenomoto
tenomoto / searchword.vim
Created December 9, 2015 02:13
Count occurrence of a particular word in vim
" n prevents replace
" in line
:s/word//gn
" in file
:%s/word//gn